博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 Flask 来写个轻博客 (22) — 实现博客文章的添加和编辑页面
阅读量:6105 次
发布时间:2019-06-21

本文共 3828 字,大约阅读时间需要 12 分钟。

Blog 项目源码:

目录

前文列表

新建表单

  • jmilkfansblog/forms.py
    博客文章的新建和编辑的表单非常简单, 只需要输入 title 和 content 就可以了.
class PostForm(Form):    """Post Form."""    title = StringField('Title', [DataRequired(), Length(max=255)])    text = TextAreaField('Blog Content', [DataRequired()])

新建视图函数

博客文章的添加和编辑仍然属于蓝图 blog 的功能集, 所以我们会在控制器 blog 模块中定义新的视图函数

  • jmilkfansblog/controller/blog.py
@blog_blueprint.route('/new', methods=['GET', 'POST'])def new_post():    """View function for new_port."""    form = PostForm()    if form.validate_on_submit():        new_post = Post(id=str(uuid4()), title=form.title.data)        new_post.text = form.text.data        new_post.publish_date = datetime.now()        db.session.add(new_post)        db.session.commit()        return redirect(url_for('blog.home'))    return render_template('new_post.html',                           form=form)@blog_blueprint.route('/edit/
', methods=['GET', 'POST'])def edit_post(id): """View function for edit_post.""" post = Post.query.get_or_404(id) form = PostForm() if form.validate_on_submit(): post.title = form.title.data post.text = form.text.data post.publish_date = datetime.now() # Update the post db.session.add(post) db.session.commit() return redirect(url_for('blog.post', post_id=post.id)) form.title.data = post.title form.text.data = post.text return render_template('edit_post.html', form=form, post=post)

NOTE 1: 添加博客文章时, 如果添加成功了就将输入到表单中的内容写入到数据库并将表单的数据传入 new_post 模板.

NOTE 2: 编辑博客文章时, 在表单的输入框中会含有原来的博客内容, 当编辑成功后会将新的博客内容写入数据库并重定向到文章页面.

新建模板

  • jmilkfansblog/template/blog/new_post.html
{% block title %}New Post{% endblock %}{% block body %}

Create A New Post

{
{ form.hidden_tag() }}
{
{ form.title.label }} {% if form.title.errors %} {% for e in form.title.errors %}

{

{ e }}

{% endfor %} {% endif %} {
{ form.title(class_='form-control') }}
{
{ form.text.label }} {% if form.text.errors %} {% for e in form.text.errors %}

{

{ e }}

{% endfor %} {% endif %} {
{ form.text(id="editor", class_='form-contril') }}
{% endblock %}{% block js %}{% endblock %}
  • jmilkfansblog/template/blog/edit_post.html
{% extends "base.html" %}{% block title %}Edit Post{% endblock %}{% block body %}

Edit the Post

{
{ form.hidden_tag() }}
{
{ form.title.label }} {% if form.title.errors %} {% for e in form.title.errors %}

{

{ e }}

{% endfor %} {% endif %} {
{ form.title(class_='form-control', value=post.title) }}
{
{ form.text.label }} {% if form.text.errors %} {% for e in form.text.errors %}

{

{ e }}

{% endfor %} {% endif %} {
{ form.text(id="editor", class_='form-contril') }}
{% endblock %}{% block js %}{% endblock %}

NOTE: 在模板 new_post 和 edit_post 中都加入了一个所见即所得 (WYSIWYG) 的博客文章编辑器 CKEditor, 该编辑器是一个 JavaScript 文件 <script src="//cdn.ckeditor.com/4.4.7/standard/ckeditor.js"></script>, CKEditor 的安装和使用都是非常方便的.

在博客文章页面添加 New 和 Edit 按钮

{% block body %}

{
{ post.title }}

Written By {

{ post.users.username }} on {
{ post.publish_date }}

{

{ post.text | safe }}

New
...

NOTE : 由编辑器 CKEditor 提交的博客文章内容会被转换成为 HTML 被存放在数据库中, 所以需要使用过滤器 safe 来过滤并显示在页面中.

实现效果

New 和 Edit 的按钮:

这里写图片描述
Create a new post:
这里写图片描述
Edit a new post:
这里写图片描述

转载于:https://www.cnblogs.com/jmilkfan-fanguiju/p/10589857.html

你可能感兴趣的文章
Java Persistence/ManyToMany
查看>>
useradd使用方法
查看>>
SQL Server 2008性能故障排查(一)——概论
查看>>
HDOJ 1020 Encoding
查看>>
移除函数调用能有更好的性能
查看>>
墙内三大云数据库测试对比 不指定
查看>>
3.1、Android Studio在虚拟机中运行应用
查看>>
【Spring】Maven的安装
查看>>
【项目实战】---用户激活
查看>>
CDH集群安装&amp;测试总结
查看>>
突然发现有人翻译了Android开发的相关开发文档,而且翻译得很好,推荐下
查看>>
离开 YY 三年,赵斌和他的声网是如何做实时音视频互动的?
查看>>
我的Java开发学习之旅------&gt;计算从1到N中1的出现次数的效率优化问题
查看>>
背水一战 Windows 10 (51) - 控件(集合类): ItemsControl - 项模板选择器, 数据分组...
查看>>
防守式编程的艺术
查看>>
云计算深度学习平台架构与实践的必经之路
查看>>
数据可视化的7个好处
查看>>
2011云计算中国峰会倒计时
查看>>
走近“云地基”的开拓者云快线
查看>>
全球SDN/NFV发展迅猛 运营商部署面临四大掣肘
查看>>